﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication4
{
    class Program
        /*Задание 5
Напишите функцию:
        int permutation (int n);
Которая печатает все перестановки числе от 1 до n (по 1 комбинации в каждой строке).
Например, при n равном 2 функция должна напечатать 2 строки:
1 2
2 1
При n равном 3 функция должна напечатать 6 строк:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
При написании функции обратите внимание, что при произвольном n функция должна напечатать 1*2*3*4*:*(n-1)* n строк.*/

    {
        static void Main(string[] args)
        {
            string s = "123";
            Permutations(s);
        }

        static void Permutations(string s)
        {
            PermutaionRec(s, "");
        }

        static void PermutaionRec(string s, string perm)
        {
            if (s.Length == 0)
            {
                Console.WriteLine(perm);
                return;
            }

            for (int i = 0; i < s.Length; i++)
            {
                char c = s[i];
                string s1 = s.Substring(0, i);
                string s2 = s.Substring(i + 1);

                PermutaionRec(s1 + s2, perm + c);
            }
        }


        static void Permutation(string s)
        {
            PermutaionInner(s, 1);
        }

        static void PermutaionInner(string s, int count)
        {
            string sub = s[0].ToString(); //c
            string last = s.Substring(1); //s2
            string news = s.Remove(0, 1) + sub;
            Switch(sub, last);
            count++;
            if (count > 24)
            {
                return;
            }
            PermutaionInner(news, count);

        }

        static void Switch(string sub, string last)
        {
            Console.WriteLine(sub + last[0] + last.Substring(1));
            Console.WriteLine(sub + last.Substring(1) + last[0]);
        }
    }
}
